// components/contact-form/contact-form.js
const app = getApp()

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    // 是否显示
    visible: {
      type: Boolean,
      value: false
    },
    // 联系对象ID
    targetId: {
      type: String,
      value: ''
    },
    // 联系对象类型（service服务, demand需求）
    targetType: {
      type: String,
      value: 'service'
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    // 表单数据
    content: '',           // 填写内容
    contactName: '',       // 联系人
    contactPhone: '',      // 联系电话
    fileList: [],          // 附件列表
    maxFiles: 5,           // 最多上传文件数
    
    // 用户信息
    userInfo: null
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 显示时初始化用户信息
     */
    onShow() {
      // 从缓存或全局数据获取用户信息，自动填充联系人和电话
      const userInfo = app.globalData.userInfo
      if (userInfo) {
        this.setData({
          userInfo: userInfo,
          contactName: userInfo.name || '',
          contactPhone: userInfo.phone || ''
        })
      }
    },

    /**
     * 填写内容输入
     */
    onContentInput(e) {
      this.setData({
        content: e.detail.value
      })
    },

    /**
     * 联系人输入
     */
    onContactNameInput(e) {
      this.setData({
        contactName: e.detail.value
      })
    },

    /**
     * 联系电话输入
     */
    onContactPhoneInput(e) {
      this.setData({
        contactPhone: e.detail.value
      })
    },

    /**
     * 选择文件
     */
    onChooseFile() {
      const that = this
      const remainCount = this.data.maxFiles - this.data.fileList.length
      
      // 显示操作菜单
      wx.showActionSheet({
        itemList: ['拍照', '从相册选择图片', '选择文件'],
        success: (res) => {
          const index = res.tapIndex
          
          if (index === 0) {
            // 拍照
            that.chooseImage('camera', remainCount)
          } else if (index === 1) {
            // 从相册选择
            that.chooseImage('album', remainCount)
          } else if (index === 2) {
            // 选择文件
            that.chooseMessageFile(remainCount)
          }
        }
      })
    },

    /**
     * 选择图片
     */
    chooseImage(sourceType, count) {
      const that = this
      wx.chooseImage({
        count: count,
        sizeType: ['compressed'],
        sourceType: [sourceType],
        success: (res) => {
          const tempFiles = res.tempFiles
          const fileList = that.data.fileList
          
          tempFiles.forEach(file => {
            fileList.push({
              type: 'image',
              path: file.path,
              size: file.size,
              name: `图片${fileList.length + 1}.jpg`
            })
          })
          
          that.setData({ fileList })
          wx.showToast({
            title: '添加成功',
            icon: 'success'
          })
        }
      })
    },

    /**
     * 选择文件
     */
    chooseMessageFile(count) {
      const that = this
      wx.chooseMessageFile({
        count: count,
        type: 'all',
        success: (res) => {
          const tempFiles = res.tempFiles
          const fileList = that.data.fileList
          
          tempFiles.forEach(file => {
            fileList.push({
              type: 'file',
              path: file.path,
              size: file.size,
              name: file.name
            })
          })
          
          that.setData({ fileList })
          wx.showToast({
            title: '添加成功',
            icon: 'success'
          })
        }
      })
    },

    /**
     * 移除文件
     */
    onRemoveFile(e) {
      const index = e.currentTarget.dataset.index
      const fileList = this.data.fileList
      fileList.splice(index, 1)
      this.setData({ fileList })
    },

    /**
     * 验证表单
     */
    validateForm() {
      const { content, contactName, contactPhone } = this.data
      
      // 验证填写内容
      if (!content || content.trim().length === 0) {
        wx.showToast({
          title: '请填写内容',
          icon: 'none'
        })
        return false
      }
      
      if (content.trim().length > 1000) {
        wx.showToast({
          title: '内容不能超过1000字',
          icon: 'none'
        })
        return false
      }
      
      // 验证联系人
      if (!contactName || contactName.trim().length === 0) {
        wx.showToast({
          title: '请输入联系人',
          icon: 'none'
        })
        return false
      }
      
      // 验证联系电话
      if (!contactPhone || contactPhone.trim().length === 0) {
        wx.showToast({
          title: '请输入联系电话',
          icon: 'none'
        })
        return false
      }
      
      // 验证电话格式
      const phoneReg = /^1[3-9]\d{9}$/
      if (!phoneReg.test(contactPhone)) {
        wx.showToast({
          title: '请输入正确的手机号',
          icon: 'none'
        })
        return false
      }
      
      return true
    },

    /**
     * 提交表单
     */
    onSubmit() {
      // 验证表单
      if (!this.validateForm()) {
        return
      }
      
      wx.showLoading({ title: '提交中...' })
      
      // TODO: 调用接口上传文件并提交表单
      // 这里预留接口调用位置
      // 示例代码：
      // const { content, contactName, contactPhone, fileList, targetId, targetType } = this.data
      // 
      // // 如果有附件，先上传附件
      // if (fileList.length > 0) {
      //   this.uploadFiles().then(fileUrls => {
      //     // 提交表单数据
      //     this.submitContactForm({
      //       targetId,
      //       targetType,
      //       content,
      //       contactName,
      //       contactPhone,
      //       attachments: fileUrls
      //     })
      //   })
      // } else {
      //   // 直接提交表单数据
      //   this.submitContactForm({
      //     targetId,
      //     targetType,
      //     content,
      //     contactName,
      //     contactPhone
      //   })
      // }
      
      // 模拟提交
      setTimeout(() => {
        wx.hideLoading()
        wx.showToast({
          title: '提交成功',
          icon: 'success'
        })
        
        // 触发成功事件
        this.triggerEvent('success', {
          content: this.data.content,
          contactName: this.data.contactName,
          contactPhone: this.data.contactPhone,
          fileList: this.data.fileList
        })
        
        // 重置表单并关闭
        this.resetForm()
        this.onClose()
      }, 1000)
    },

    /**
     * 上传文件（预留接口）
     */
    uploadFiles() {
      return new Promise((resolve, reject) => {
        const fileList = this.data.fileList
        const uploadedUrls = []
        let uploadCount = 0
        
        fileList.forEach((file, index) => {
          // TODO: 调用上传接口
          // wx.uploadFile({
          //   url: `${app.globalData.apiBaseUrl}/api/upload`,
          //   filePath: file.path,
          //   name: 'file',
          //   success: (res) => {
          //     const data = JSON.parse(res.data)
          //     if (data.code === 200) {
          //       uploadedUrls.push(data.data.url)
          //     }
          //     uploadCount++
          //     if (uploadCount === fileList.length) {
          //       resolve(uploadedUrls)
          //     }
          //   },
          //   fail: (err) => {
          //     console.error('上传失败:', err)
          //     uploadCount++
          //     if (uploadCount === fileList.length) {
          //       resolve(uploadedUrls)
          //     }
          //   }
          // })
          
          // 模拟上传成功
          uploadedUrls.push(`https://example.com/files/${index}.jpg`)
          uploadCount++
          if (uploadCount === fileList.length) {
            resolve(uploadedUrls)
          }
        })
      })
    },

    /**
     * 提交联系表单（预留接口）
     */
    submitContactForm(data) {
      // TODO: 调用后端接口提交表单
      // wx.request({
      //   url: `${app.globalData.apiBaseUrl}/api/contact/submit`,
      //   method: 'POST',
      //   data: data,
      //   success: (res) => {
      //     if (res.data.code === 200) {
      //       wx.showToast({
      //         title: '提交成功',
      //         icon: 'success'
      //       })
      //       this.triggerEvent('success', data)
      //       this.resetForm()
      //       this.onClose()
      //     } else {
      //       wx.showToast({
      //         title: res.data.message || '提交失败',
      //         icon: 'none'
      //       })
      //     }
      //   },
      //   fail: (err) => {
      //     console.error('提交失败:', err)
      //     wx.showToast({
      //       title: '提交失败，请重试',
      //       icon: 'none'
      //     })
      //   },
      //   complete: () => {
      //     wx.hideLoading()
      //   }
      // })
    },

    /**
     * 重置表单
     */
    resetForm() {
      this.setData({
        content: '',
        fileList: []
      })
    },

    /**
     * 关闭模态框
     */
    onClose() {
      this.resetForm()
      this.triggerEvent('close')
    },

    /**
     * 阻止事件冒泡
     */
    stopPropagation() {}
  },

  /**
   * 生命周期函数
   */
  lifetimes: {
    attached() {
      this.onShow()
    }
  }
})

